package com.huilian.tool.work.weixin.service;


/**
 * @Author 少凡
 * @Date 2022-06-09 13:56
 * version 1.0
 */
public interface AuthorizeService {

    /**
     * 获取服务商凭证token
     * 代表的是服务商的身份
     * 用于服务商级别的接口调用，比如登录授权、推广二维码等
     */
    String getProviderAccessToken(String redisKey);

    /**
     * 第三方应用的token
     * 用于获取第三方应用的预授权码，获取授权企业信息等
     * @return
     */
    String getSuiteAccessToken(String suiteTicket);


    /**
     * 获取预授权码
     * 该API用于获取预授权码。预授权码用于企业授权时的第三方服务商安全验证。
     *
     * @return
     */
    String getPreAuthCode(String suiteTicket);

    /**
     * 设置授权配置
     * 每次授权，都需要调用一次
     * @param preAuthCode 这个预受权码，需要和授权同用
     * @return
     */
    String setSessionInfo(String suiteTicket, String preAuthCode ,Integer authType);


    String authInstall (String redirectUrl, String suiteTicket,Integer authType);


    /**
     * 获取企业永久授权码
     * 要获取企业永久授权码，需要在第三方网站安装应用，或在企业微信应用市场安装返回 临时授权码，才能够获取到
     * @param suiteTicket
     * @param authCode 临时授权码，会在授权成功时附加在redirect_uri中跳转回第三方服务商网站，或通过授权成功通知回调推送给服务商。长度为64至512个字节
     * @return
     */
    String getPermanentAuthCode(String suiteTicket, String authCode);

    /**
     * 授权企业的token
     * 企业安装第三方应用后，第三方服务商以企业的WorkWeiXinConfig.CORPID、永久授权码来获取access_token
     * 用于操作授权企业相关接口，如通讯录管理，消息推送等
     *
     * @return
     */
    String getCorpAccessToken(String suiteTicket, String authCorpId,String permanentCode,Integer corpId);

    /**
     * 获取应用的管理员列表
     * @param authCorpId 授权方corpid
     * @param agentId 授权方安装的应用agentid
     * @return
     */
    String getAdminList(String suiteTicket,String authCorpId,String agentId);

    /**
     *
     * @param authCorpId 授权方corpid
     * @param permanentCode 永久授权码，通过get_permanent_code获取
     * @return
     */
    String getAuthInfo(String suiteTicket,String authCorpId,String permanentCode);

    /**
     * 网页授权登录
     * @param redirectUrl
     * @param scope
     * @param state
     * @return
     */
    String authLoginUrl(String redirectUrl,String scope, String state);

    /**
     * 获取访问用户身份
     * @param suiteTicket
     * @param code
     * @return
     */
    String getUserInfo3rd(String suiteTicket, String code);

    /**
     * 获取访问用户敏感信息
     * @param suiteTicket 第三方应用ticket
     * @param userTicket //用户ticket, 通过获取访问用户身份获取
     * @return
     */
    String getUserDetail3rd(String suiteTicket, String userTicket);




}
